import { IconsType } from '../../../common'
import { IconIconifyPropsType, IconTypeConst } from '../../../components'
import { IconifySetIcons } from './get-set-icons.ts'
import { genSetIconsAll } from './gen-set-icons-all.ts'

/**
 * 根据 IconifySetIcons 生成图标列表（列表中的元素为 SIcon 组件的组件参数外加一个 iconName 属性）
 *
 * @param {IconifySetIcons} setIcons IconifySetIcons Iconify 图标集数据信息
 * @param {Omit<IconIconifyPropsType, "icon">} iconIconifyProps 图标组件 SIconIconify
 * 的组件参数，其中 icon 组件参数已被忽略，该参数值会从 IconifySetIcons 中获取
 * @returns {IconPropsType[]} 图标列表
 */
export const genIconsBySetIcons = (
  setIcons: IconifySetIcons,
  iconIconifyProps: Omit<IconIconifyPropsType, 'icon'> = {}
): IconsType => {
  const icons: IconsType = []
  if (!setIcons.all) setIcons.all = genSetIconsAll(setIcons.categories, setIcons.uncategorized)
  for (const iconName of setIcons.all) {
    const iconFullName = setIcons.prefix + ':' + iconName
    icons.push({
      iconName: iconFullName,
      iconType: IconTypeConst.ICONIFY,
      iconProps: {
        ...iconIconifyProps,
        icon: iconFullName
      }
    })
  }
  return icons
}

export type GenIconsBySetIconsType = typeof genIconsBySetIcons
